home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / osi / isode / quipu-7.0.patch-1 < prev    next >
Encoding:
Internet Message Format  |  1991-11-25  |  23.9 KB

  1. From: Colin Robbins <"/I=c/S=robbins/O=XTEL/PRMD=X-Tel Services/ADMD= /C=GB/"@chx400.switch.ch>
  2. Message-ID: <"13667 Fri Nov 22 10:38:30 1991"@xtel.co.uk>
  3. To: quipu@cs.ucl.ac.uk
  4. Subject: QUIPU-7.0 Patch 1
  5. Reply-To: quipu-support@cs.ucl.ac.uk
  6. Autoforwarded: TRUE
  7. X400-Recipients: non-disclosure:;
  8.  
  9.  
  10. - ------------------------------ Start of body part 1
  11.  
  12.  
  13. Dear Camayocs,
  14.  
  15. Included below is Patch #1 for QUIPU-7.0.  
  16.  
  17. The major aim of the patch is to fix DSA reliability problems. 
  18. The fixes include:
  19.     
  20.     Fixes to prevent replicated EDBs filling the Disk with garbage.    
  21.     Fixes to the scheduling code to increase DSA reliability.
  22.     Fix to correctly load 'NULL' EDB files.
  23.     Fix to 'alias' indexing problem.
  24.     A fix to the X.25 handler to allow for 'quick' connections!
  25.     Protocol alignment for an obsure read operation.
  26.     Test for hypothetcial deadlock case.
  27.     Fix to close the quipu.log file periodically.
  28.  
  29. For DUAs we have included a fix to the Quality of Service and
  30. T.61 string syntax handlers. 
  31.  
  32. The patch should be applied to the ISODE-7.0 source tree.  
  33. You will then need to re-compile ISODE and QUIPU.  To do this you
  34. should use 
  35.  
  36.     cd isode-7.0
  37.        ./make all all-quipu
  38.     su
  39.     ./make inst-all inst-quipu
  40.  
  41. And if you installed the "little" dish binaries you should do
  42.  
  43.     cd others/quipu/uips/dish
  44.     ./make all 
  45.     su
  46.     ./make inst-all
  47.  
  48.  
  49. Thanks to Paul Barker, Tim Howes, Mark Prior, Mike Roe, Thomas Lenggenhager, 
  50. George Michaelson, Oliver Wenzel, and the Giant Tortoise DSA for 
  51. helping detect and fix these bugs.
  52.  
  53. Colin
  54.  
  55.  
  56. *** /tmp/RCSAa10173    Wed Oct 23 11:39:17 1991
  57. - --- tsap/tp0ts.c    Wed Oct 23 10:59:06 1991
  58. ***************
  59. *** 121,127 ****
  60.       if (t = tb -> tb_retry) {
  61.       tb -> tb_retry = NULL;
  62.   
  63. !     if (async)
  64.           switch ((*tb -> tb_retryfnx) (tb, td)) {
  65.           case NOTOK:
  66.                   goto out;
  67. - --- 121,127 ----
  68.       if (t = tb -> tb_retry) {
  69.       tb -> tb_retry = NULL;
  70.   
  71. !     if (async && tb -> tb_retryfnx)
  72.           switch ((*tb -> tb_retryfnx) (tb, td)) {
  73.           case NOTOK:
  74.                   goto out;
  75. *** /tmp/RCSAa10173    Wed Oct 23 11:39:18 1991
  76. - --- tsap/ts2sunlink.c    Wed Oct 23 10:58:40 1991
  77. ***************
  78. *** 175,181 ****
  79.       register struct tp4pkt *t;
  80.   
  81.       t = NULL;
  82. !     if (async)
  83.       switch ((*tb -> tb_retryfnx) (tb, td)) {
  84.           case NOTOK:
  85.               goto out;
  86. - --- 175,181 ----
  87.       register struct tp4pkt *t;
  88.   
  89.       t = NULL;
  90. !     if (async && tb -> tb_retryfnx)
  91.       switch ((*tb -> tb_retryfnx) (tb, td)) {
  92.           case NOTOK:
  93.               goto out;
  94. *** /tmp/RCSAa10173    Wed Oct 23 11:39:19 1991
  95. - --- tsap/ts2tcp.c    Wed Oct 23 10:57:33 1991
  96. ***************
  97. *** 189,194 ****
  98. - --- 189,196 ----
  99.   #endif
  100.   #endif
  101.   
  102. +     tb -> tb_retryfnx = NULLIFP;    /* No need... */
  103.       return DONE;
  104.   }
  105.   
  106. *** /tmp/RCSAa10173    Wed Oct 23 11:39:19 1991
  107. - --- tsap/ts2tli.c    Wed Oct 23 10:58:54 1991
  108. ***************
  109. *** 459,465 ****
  110.       if (tb->tb_cc == -1) { /* call not yet connected */
  111.       struct TSAPaddr ta;
  112.   
  113. !     if (async) {
  114.           switch ((*tb -> tb_retryfnx) (tb, td)) {
  115.           case NOTOK:
  116.           goto out;
  117. - --- 459,465 ----
  118.       if (tb->tb_cc == -1) { /* call not yet connected */
  119.       struct TSAPaddr ta;
  120.   
  121. !     if (async && tb -> tb_retryfnx) {
  122.           switch ((*tb -> tb_retryfnx) (tb, td)) {
  123.           case NOTOK:
  124.           goto out;
  125. *** /tmp/RCSAa10173    Wed Oct 23 11:39:20 1991
  126. - --- tsap/ts2x25.c    Wed Oct 23 10:57:34 1991
  127. ***************
  128. *** 146,151 ****
  129. - --- 146,153 ----
  130.       (void) XTService (tb);      /* in case pktsize changed... */
  131.       LLOG (x25_log, LLOG_NOTICE,
  132.         ("connection %d to %s", fd, na2str (remote)));
  133. +     tb -> tb_retryfnx = NULLIFP;    /* No need... */
  134.   
  135.       return DONE;
  136.   }
  137.  
  138.  
  139. *** /tmp/RCSAa07079    Tue Nov 19 13:13:36 1991
  140. - --- quipu/get_dsa_info.c    Tue Nov 19 13:10:00 1991
  141. ***************
  142. *** 306,313 ****
  143.           break;
  144.   
  145.       case DI_TASK:
  146. !         task_dsa_info_wakeup(di);
  147. !         di_free(di);
  148.           break;
  149.   
  150.       default:
  151. - --- 306,313 ----
  152.           break;
  153.   
  154.       case DI_TASK:
  155. !         if ( task_dsa_info_wakeup(di) )
  156. !         di_free(di);
  157.           break;
  158.   
  159.       default:
  160. *** /tmp/RCSAa23005    Thu Nov 14 16:22:36 1991
  161. - --- quipu/ds_read.c    Thu Nov 14 16:16:25 1991
  162. ***************
  163. *** 160,172 ****
  164.                   quipu_ctx, realtarget)) != NULLATTR)
  165.                   goto out;
  166.   
  167.               error->dse_type = DSE_ATTRIBUTEERROR;
  168.               error->ERR_ATTRIBUTE.DSE_at_name = get_copy_dn (entryptr);
  169.               error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what =DSE_AT_NOSUCHATTRIBUTE;
  170. !             if (arg->rda_eis.eis_select != NULLATTR)
  171. !                 error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_type = AttrT_cpy(arg->rda_eis.eis_select->attr_type);
  172. !             else
  173. !                 error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_type = NULLAttrT;
  174.               error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_value = NULLAttrV;
  175.               error->ERR_ATTRIBUTE.DSE_at_plist.dse_at_next = DSE_AT_NOPROBLEM;
  176.               dn_free (realtarget);
  177. - --- 160,174 ----
  178.                   quipu_ctx, realtarget)) != NULLATTR)
  179.                   goto out;
  180.   
  181. +             if (arg->rda_eis.eis_select == NULLATTR)
  182. +                 goto out;
  183.               error->dse_type = DSE_ATTRIBUTEERROR;
  184.               error->ERR_ATTRIBUTE.DSE_at_name = get_copy_dn (entryptr);
  185.               error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what =DSE_AT_NOSUCHATTRIBUTE;
  186. !             error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_type = 
  187. !                     AttrT_cpy(arg->rda_eis.eis_select->attr_type);
  188.               error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_value = NULLAttrV;
  189.               error->ERR_ATTRIBUTE.DSE_at_plist.dse_at_next = DSE_AT_NOPROBLEM;
  190.               dn_free (realtarget);
  191. ***************
  192. *** 206,219 ****
  193.       }
  194.   
  195.       if ((result->rdr_entry.ent_attr = eis_select (arg->rda_eis,entryptr, dsp ? NULLDN : binddn, quipu_ctx, realtarget)) == NULLATTR)
  196. !         if (! arg->rda_eis.eis_allattributes) {
  197.               error->dse_type = DSE_ATTRIBUTEERROR;
  198.                           error->ERR_ATTRIBUTE.DSE_at_name = get_copy_dn (entryptr);
  199.                           error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what =DSE_AT_NOSUCHATTRIBUTE;
  200. !             if (arg->rda_eis.eis_select != NULLATTR)
  201. !                             error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_type = AttrT_cpy(arg->rda_eis.eis_select->attr_type);
  202. !             else
  203. !                             error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_type = NULLAttrT;
  204.                           error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_value = NULLAttrV;
  205.                           error->ERR_ATTRIBUTE.DSE_at_plist.dse_at_next = DSE_AT_NOPROBLEM;
  206.               dn_free (realtarget);
  207. - --- 208,220 ----
  208.       }
  209.   
  210.       if ((result->rdr_entry.ent_attr = eis_select (arg->rda_eis,entryptr, dsp ? NULLDN : binddn, quipu_ctx, realtarget)) == NULLATTR)
  211. !         if ((! arg->rda_eis.eis_allattributes) && arg->rda_eis.eis_select) {
  212.               error->dse_type = DSE_ATTRIBUTEERROR;
  213.                           error->ERR_ATTRIBUTE.DSE_at_name = get_copy_dn (entryptr);
  214.                           error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what =DSE_AT_NOSUCHATTRIBUTE;
  215. !                     error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_type = 
  216. !                 AttrT_cpy(arg->rda_eis.eis_select->attr_type);
  217.                           error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_value = NULLAttrV;
  218.                           error->ERR_ATTRIBUTE.DSE_at_plist.dse_at_next = DSE_AT_NOPROBLEM;
  219.               dn_free (realtarget);
  220.  
  221.  
  222.  
  223. *** /tmp/RCSAa11110    Thu Oct 17 14:15:48 1991
  224. - --- quipu/shadow.c    Thu Oct 17 13:51:18 1991
  225. ***************
  226. *** 58,64 ****
  227.   extern AttributeType at_xref;
  228.   extern AttributeType at_nssr;
  229.   extern AttributeType at_objectclass;
  230. - - extern Attr_Sequence cpy_as_comp();
  231.   extern short syntax_dn;
  232.   
  233.   typedef struct _atlist {
  234. - --- 58,63 ----
  235. ***************
  236. *** 357,363 ****
  237.                           "external reference missing"));
  238.               return;
  239.           }
  240. !         new_as = as_merge (new_as, cpy_as_comp (as));
  241.   
  242.           if ((as = as_find_type (new_as, at_objectclass)) == NULLATTR) {
  243.               LLOG (log_dsap, LLOG_EXCEPTIONS, (
  244. - --- 356,362 ----
  245.                           "external reference missing"));
  246.               return;
  247.           }
  248. !         new_as = as_merge (new_as, as_comp_cpy (as));
  249.   
  250.           if ((as = as_find_type (new_as, at_objectclass)) == NULLATTR) {
  251.               LLOG (log_dsap, LLOG_EXCEPTIONS, (
  252.  
  253.  
  254.  
  255. *** /tmp/RCSAa02760    Mon Oct 14 12:47:21 1991
  256. - --- dsap/common/qos.c    Mon Oct 14 12:46:55 1991
  257. ***************
  258. *** 354,362 ****
  259.       }
  260.       attrQoS_print (ps, p -> dit_quality, format);
  261.       }
  262. !     if (a -> dit_description)
  263. !     ps_printf (ps, format == READOUT ? "\n%*s(%s)" : " # %s",
  264. !            a -> dit_description, qos_indent, "");
  265.   }
  266.   
  267.   static struct attrQoS *str2attrQoS (str)
  268. - --- 359,371 ----
  269.       }
  270.       attrQoS_print (ps, p -> dit_quality, format);
  271.       }
  272. !     if (a -> dit_description) {
  273. !     if (format == READOUT)
  274. !         ps_printf (ps, "\n%*s(%s)", qos_indent, 
  275. !            a -> dit_description);
  276. !     else
  277. !         ps_printf (ps, " # %s", a -> dit_description);
  278. !     }
  279.   }
  280.   
  281.   static struct attrQoS *str2attrQoS (str)
  282.  
  283.  
  284. *** /tmp/RCSAa24516    Thu Nov  7 10:35:20 1991
  285. - --- dsap/common/string.c    Thu Nov  7 10:34:55 1991
  286. ***************
  287. *** 88,101 ****
  288.       0xe5, '?', '?', '?', '?', '?', '?', '?', '?', 
  289.   
  290.   /* Diaresis upper case */
  291. !     0xc4, '?', 0xc9, 0xcd, '?', 0xd3, 0xda, 0x82, 
  292.   /* Diaresis lower case */
  293. !     0xe4, '?', 0xe9, 0xed, '?', 0xf3, 0xfa, 0xff, '"', 
  294.   
  295.   /* Umlaut upper case */
  296. !     0xc4, '?', 0xc9, 0xcd, '?', 0xd3, 0xda, 0x82,  
  297.   /* Umlaut lower case */
  298. !     0xe4, '?', 0xe9, 0xed, '?', 0xf3, 0xfa, 0xff, '"', 
  299.   
  300.   /* Ring upper case */
  301.       0xc5, '?', '?', '?', '?', '?', '?', '?', 
  302. - --- 94,107 ----
  303.       0xe5, '?', '?', '?', '?', '?', '?', '?', '?', 
  304.   
  305.   /* Diaresis upper case */
  306. !         0xc4, '?', 0xcb, 0xcf, '?', 0xd6, 0xdc, 0x82,
  307.   /* Diaresis lower case */
  308. !         0xe4, '?', 0xeb, 0xef, '?', 0xf6, 0xfc, 0xff, '"',
  309.   
  310.   /* Umlaut upper case */
  311. !         0xc4, '?', 0xcb, 0xcf, '?', 0xd6, 0xdc, 0x82,
  312.   /* Umlaut lower case */
  313. !         0xe4, '?', 0xeb, 0xef, '?', 0xf6, 0xfc, 0xff, '"',
  314.   
  315.   /* Ring upper case */
  316.       0xc5, '?', '?', '?', '?', '?', '?', '?', 
  317. ***************
  318. *** 113,121 ****
  319.       '?', '?', '?', '?', '?', '?', '?', '?',  '_', 
  320.   
  321.   /* Umlaut upper case */
  322. !     0xc4, '?', 0xc9, 0xcd, '?', 0xd3, 0xda, 0x82,
  323.   /* Umlaut lower case */
  324. !     0xe4, '?', 0xe9, 0xed, '?', 0xf3, 0xfa, 0xff, '"', 
  325.   
  326.   /* Cedilla? upper case */
  327.       '?', 0xc7, '?', '?', '?', '?', '?', '?',
  328. - --- 119,127 ----
  329.       '?', '?', '?', '?', '?', '?', '?', '?',  '_', 
  330.   
  331.   /* Umlaut upper case */
  332. !         0xc4, '?', 0xcb, 0xcf, '?', 0xd6, 0xdc, 0x82,
  333.   /* Umlaut lower case */
  334. !         0xe4, '?', 0xeb, 0xef, '?', 0xf6, 0xfc, 0xff, '"',
  335.   
  336.   /* Cedilla? upper case */
  337.       '?', 0xc7, '?', '?', '?', '?', '?', '?',
  338.  
  339.  
  340. *** /tmp/RCSAa23601    Thu Aug 22 13:09:42 1991
  341. - --- quipu/conn_retry.c    Thu Aug 22 13:06:38 1991
  342. ***************
  343. *** 41,46 ****
  344. - --- 41,48 ----
  345.   
  346.   struct connection    * conn_alloc();
  347.   
  348. + static test_deadlock();
  349.   /*
  350.   * Deal with an incoming acceptance of association establishment.
  351.   * Return value says whether anything has happened or not.
  352. ***************
  353. *** 123,129 ****
  354.           /* See if there is another DSA to try... */
  355.           if ((on->on_state != ON_ABANDONED) && (on->on_dsas != NULL_DI_BLOCK)) {    
  356.               LLOG (log_dsap,LLOG_NOTICE,("Trying a different DSA (NOTOK)..."));
  357. !             if (oper_chain (on) == OK) {
  358.                   if (ont == NULLOPER)
  359.                       conn->cn_operlist = onext;
  360.                   else
  361. - --- 125,132 ----
  362.           /* See if there is another DSA to try... */
  363.           if ((on->on_state != ON_ABANDONED) && (on->on_dsas != NULL_DI_BLOCK)) {    
  364.               LLOG (log_dsap,LLOG_NOTICE,("Trying a different DSA (NOTOK)..."));
  365. !             if ((test_deadlock(on) == OK) &&
  366. !                (oper_chain (on) == OK)) {
  367.                   if (ont == NULLOPER)
  368.                       conn->cn_operlist = onext;
  369.                   else
  370. ***************
  371. *** 137,143 ****
  372.           }
  373.           conn_extract(conn);
  374.       break;
  375.       case DONE :
  376.           DLOG (log_dsap,LLOG_NOTICE,( "D-BIND.RETRY DONE (%d)",conn->cn_ad));
  377.           if( (conn->cn_ad == NOTOK) || (conn_req_aux(conn) != OK))
  378. - --- 140,146 ----
  379.           }
  380.           conn_extract(conn);
  381.       break;
  382. !         
  383.       case DONE :
  384.           DLOG (log_dsap,LLOG_NOTICE,( "D-BIND.RETRY DONE (%d)",conn->cn_ad));
  385.           if( (conn->cn_ad == NOTOK) || (conn_req_aux(conn) != OK))
  386. ***************
  387. *** 153,159 ****
  388.               /* See if there is another DSA to try... */
  389.               if ((on->on_state != ON_ABANDONED) && (on->on_dsas != NULL_DI_BLOCK)) {    
  390.                   LLOG (log_dsap,LLOG_NOTICE,("Trying a different DSA (DONE)..."));
  391. !                 if (oper_chain (on) == OK) {
  392.                       if (ont == NULLOPER)
  393.                           conn->cn_operlist = onext;
  394.                       else
  395. - --- 156,163 ----
  396.               /* See if there is another DSA to try... */
  397.               if ((on->on_state != ON_ABANDONED) && (on->on_dsas != NULL_DI_BLOCK)) {    
  398.                   LLOG (log_dsap,LLOG_NOTICE,("Trying a different DSA (DONE)..."));
  399. !                 if ((test_deadlock(on) == OK) &&
  400. !                    (oper_chain (on) == OK)) {
  401.                       if (ont == NULLOPER)
  402.                           conn->cn_operlist = onext;
  403.                       else
  404. ***************
  405. *** 195,198 ****
  406. - --- 199,241 ----
  407.   
  408.       if (pstate != conn->cn_state)
  409.       conn->cn_last_used = timenow;
  410. + }
  411. + static test_deadlock (on)
  412. + struct oper_act    * on;
  413. + {
  414. + struct di_block    * di;
  415. + register int ndi = 0;
  416. +     for (di= on -> on_dsas; di!= NULL_DI_BLOCK; di= di -> di_next) 
  417. +         ndi++;
  418. +     /* To proceed, we need to contact on_dsas. */
  419. +     /* Check they do not rely on the conn that has just failed */
  420. +     /* Possibly a better way of testing this... */
  421. +     for (di= on -> on_dsas; di!= NULL_DI_BLOCK; di= di -> di_next) 
  422. +         if (( di-> di_state == DI_DEFERRED ) &&
  423. +             ( di-> di_perform ) &&
  424. +             ( di-> di_perform-> on_conn ))
  425. +             switch (di-> di_perform-> on_conn-> cn_state) {
  426. +                 case 0:
  427. +                 case CN_FAILED:
  428. +                 ndi--;
  429. +             }
  430. +     if (ndi != 0)
  431. +         return OK;
  432. +     
  433. +     if (on -> on_task) {    
  434. +         on -> on_task -> tk_resp.di_error.de_err.dse_type =
  435. +             DSE_SERVICEERROR;
  436. +         on -> on_task -> 
  437. +             tk_resp.di_error.de_err.ERR_SERVICE.DSE_sv_problem =
  438. +             DSE_SV_UNABLETOPROCEED;
  439. +     }
  440. +     
  441. +     return NOTOK;
  442.   }
  443. *** /tmp/RCSAa23601    Thu Aug 22 13:09:42 1991
  444. - --- quipu/get_dsa_info.c    Thu Aug 22 11:10:31 1991
  445. ***************
  446. *** 61,66 ****
  447. - --- 61,67 ----
  448.       struct di_block    * di_lookup;
  449.       struct oper_act    * on = NULLOPER;
  450.       int           res;
  451. +     Entry          te = NULLENTRY;
  452.   
  453.       DLOG (log_dsap,LLOG_TRACE,("get_dsa_info()"));
  454.   
  455. ***************
  456. *** 115,132 ****
  457.       }
  458.       }
  459.   
  460. !     if ((res = really_find_entry(dn, TRUE, dn_stack, FALSE, &((*di_p)->di_entry), err, &(di_lookup))) == DS_OK) 
  461.       /* is it really OK ??? */
  462. !     if (((*di_p)->di_entry ->e_data == E_TYPE_CONSTRUCTOR) 
  463. !         || ((*di_p)->di_entry->e_dsainfo == NULL)
  464. !         || ((*di_p)->di_entry->e_dsainfo->dsa_addr == NULLPA)) {
  465.           DN dn_found;
  466.           DLOG(log_dsap, LLOG_NOTICE, ("rfe returned a constructor"));
  467. !         dn_found = get_copy_dn((*di_p)->di_entry);
  468. !         res = constructor_dsa_info(dn_found,dn_stack,FALSE,(*di_p)->di_entry,err,&(di_lookup));
  469.           dn_free (dn_found);
  470. !     } else
  471.           (*di_p)->di_entry->e_refcount++;
  472.   
  473.       switch (res)
  474.       {
  475. - --- 116,137 ----
  476.       }
  477.       }
  478.   
  479. !     if ((res = really_find_entry(dn, TRUE, dn_stack, FALSE, &te, 
  480. !                 err, &(di_lookup))) == DS_OK) 
  481.       /* is it really OK ??? */
  482. !     if ((te->e_data == E_TYPE_CONSTRUCTOR) 
  483. !         || (te->e_dsainfo == NULL)
  484. !         || (te->e_dsainfo->dsa_addr == NULLPA)) {
  485.           DN dn_found;
  486.           DLOG(log_dsap, LLOG_NOTICE, ("rfe returned a constructor"));
  487. !         dn_found = get_copy_dn(te);
  488. !         res = constructor_dsa_info(dn_found, dn_stack, FALSE, te,
  489. !                        err, &(di_lookup));
  490.           dn_free (dn_found);
  491. !     } else {
  492. !         (*di_p)->di_entry = te;
  493.           (*di_p)->di_entry->e_refcount++;
  494. +     }
  495.   
  496.       switch (res)
  497.       {
  498. *** /tmp/RCSAa23601    Thu Aug 22 13:09:42 1991
  499. - --- quipu/di_block.c    Thu Aug 22 09:19:15 1991
  500. ***************
  501. *** 49,54 ****
  502. - --- 49,59 ----
  503.   struct di_block *di;
  504.   {
  505.       DLOG(log_dsap, LLOG_TRACE, ("di_free()"));
  506. +     if (di->di_state == -1) {
  507. +         LLOG (log_dsap,LLOG_EXCEPTIONS, ("duplicate di_free"));
  508. +         return;
  509. +     }
  510.   
  511.       switch (di->di_type) {
  512.         case DI_GLOBAL:     break;
  513.  
  514.  
  515.  
  516. *** /tmp/RCSAa16265    Wed Aug 21 15:59:06 1991
  517. - --- quipu/entry_load.c    Wed Aug 21 15:37:27 1991
  518. ***************
  519. *** 362,370 ****
  520.   
  521.           if (file_check(offset, e) == OK) {
  522.                   if ((e->e_children = getentry_block(e, filename)) == NULLAVL) {
  523.               if (e->e_allchildrenpresent != FALSE &&
  524.                   e->e_leaf == FALSE) {
  525. - -                 e->e_allchildrenpresent = FALSE;
  526.                   got_all = FALSE;
  527.                   return(OK);
  528.               } else
  529. - --- 362,372 ----
  530.   
  531.           if (file_check(offset, e) == OK) {
  532.                   if ((e->e_children = getentry_block(e, filename)) == NULLAVL) {
  533. +             if (parse_status != 0)
  534. +                 return(NOTOK);
  535.               if (e->e_allchildrenpresent != FALSE &&
  536.                   e->e_leaf == FALSE) {
  537.                   got_all = FALSE;
  538.                   return(OK);
  539.               } else
  540. *** dsap/common/_turbo_index.c    Tue Aug 13 13:06:57 1991
  541. - --- dsap/common/turbo_index.c    Tue Aug 13 13:07:27 1991
  542. ***************
  543. *** 472,477 ****
  544. - --- 472,478 ----
  545.       for ( j = i + 1; pindex->i_nonlocalaliases[ j ]; j++ )
  546.           pindex->i_nonlocalaliases[ j - 1 ] =
  547.               pindex->i_nonlocalaliases[ j ];
  548. +     pindex->i_nonlocalaliases[ j - 1 ] = NULLENTRY;
  549.   
  550.       return;
  551.   }
  552. *** dsap/common/_attribute.c    Mon Aug 12 19:11:30 1991
  553. - --- dsap/common/attribute.c    Mon Aug 12 19:11:54 1991
  554. ***************
  555. *** 199,204 ****
  556. - --- 199,206 ----
  557.              if (acl->ac_default == NULLACL_INFO)
  558.                  acl->ac_default = acl_default ();
  559.               }
  560. +     } else {
  561. +         eptr->e_acl = NULLACL;
  562.       }
  563.   
  564.       if (as = entry_find_type (eptr,at_edbinfo)) {
  565. *** dsap/common/attribute.c~    Wed Jul 17 12:25:03 1991
  566. - --- dsap/common/attribute.c    Mon Aug 12 15:35:30 1991
  567. ***************
  568. *** 368,373 ****
  569. - --- 371,377 ----
  570.                      || (AttrT_cmp (as->attr_type,at_alias) == 0)
  571.                      || (AttrT_cmp (as->attr_type,at_inherit) == 0)) {
  572.                       LLOG(log_dsap,LLOG_EXCEPTIONS,("Inherited system attribute only allowed in default case"));
  573. +                     error->dse_type = DSE_ATTRIBUTEERROR;
  574.                       error->ERR_ATTRIBUTE.DSE_at_name = get_copy_dn (eptr);
  575.                       error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what =DSE_AT_CONSTRAINTVIOLATION;
  576.                       error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_type = AttrT_cpy (as->attr_type);
  577. ***************
  578. *** 379,384 ****
  579. - --- 383,389 ----
  580.                   if (as->attr_value == NULLAV) {
  581.                       if ((nas = entry_find_type (eptr,as->attr_type)) == NULLATTR) {
  582.                           LLOG(log_dsap,LLOG_EXCEPTIONS,("Value missing for always inherited attribute type"));
  583. +                             error->dse_type = DSE_ATTRIBUTEERROR;
  584.                           error->ERR_ATTRIBUTE.DSE_at_name = get_copy_dn (eptr);
  585.                           error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what =DSE_AT_NOSUCHATTRIBUTE;
  586.                           error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_type = AttrT_cpy (as->attr_type);
  587. ***************
  588. *** 394,399 ****
  589. - --- 399,405 ----
  590.                   if (as->attr_value == NULLAV) {
  591.                       if ((nas = entry_find_type (eptr,as->attr_type)) == NULLATTR) {
  592.                           LLOG(log_dsap,LLOG_EXCEPTIONS,("Value missing for default inherited attribute type"));
  593. +                             error->dse_type = DSE_ATTRIBUTEERROR;
  594.                           error->ERR_ATTRIBUTE.DSE_at_name = get_copy_dn (eptr);
  595.                           error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what =DSE_AT_NOSUCHATTRIBUTE;
  596.                           error->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_type = AttrT_cpy (as->attr_type);
  597.  
  598. *** /tmp/RCSAa27974    Thu Nov 21 13:36:17 1991
  599. - --- dsap/x500as/af.py    Thu Nov 21 13:35:40 1991
  600. ***************
  601. *** 88,93 ****
  602. - --- 88,99 ----
  603.           ANY [[a asn]]
  604.               OPTIONAL
  605.       }
  606. +     %D{
  607. +         if ((*parm)->asn == NULLPE)
  608. +             (*parm)->p_type = ALG_PARM_ABSENT;
  609. +         else
  610. +             (*parm)->p_type = ALG_PARM_UNKNOWN;
  611. +     %}
  612.   
  613.   SubjectPublicKeyInfo [[P struct key_info *]]
  614.       ::=
  615. *** dsap/common/_cpair.c       Wed Jul 17 12:25:16 1991
  616. - --- dsap/common/cpair.c    Tue Sep 17 14:41:19 1991
  617. ***************
  618. *** 92,98 ****
  619.     str = ptr;
  620.     if ((str != NULLCP) && (index(str, '#') != NULLCP))
  621.     {
  622. !     result->cert = str2cert(str);
  623.       if (result->cert == (struct certificate *) 0)
  624.       {
  625.         free((char *) result);
  626. - --- 92,98 ----
  627.     str = ptr;
  628.     if ((str != NULLCP) && (index(str, '#') != NULLCP))
  629.     {
  630. !     result->reverse = str2cert(str);
  631.       if (result->cert == (struct certificate *) 0)
  632.       {
  633.         free((char *) result);
  634.  
  635.  
  636. *** /tmp/RCSAa23032    Thu Nov 21 09:06:53 1991
  637. - --- quipu/task_select.c    Thu Nov 21 09:06:27 1991
  638. ***************
  639. *** 40,45 ****
  640. - --- 40,54 ----
  641.   time_t lastedb_update;
  642.   struct oper_act * pending_ops = NULLOPER;
  643.   
  644. + #ifndef NO_STATS
  645. + extern LLog * log_stat;
  646. + static time_t last_log_close = (time_t)0;
  647. + #define LOGOPENTIME 60*60    /* Close once every 60 minutes */
  648. + #endif
  649.   struct task_act    * task_select(secs_p)
  650.   int        * secs_p;
  651.   {
  652. ***************
  653. *** 437,442 ****
  654. - --- 446,462 ----
  655.           (*secs_p) = 0;    /* let connection be re-used */
  656.          }
  657.       }
  658. + #ifndef NO_STATS
  659. +     if ( (timenow - last_log_close) >= LOGOPENTIME ) {
  660. +     ll_close (log_stat);
  661. +     last_log_close = timenow;
  662. +     } else {
  663. +     if ( (ret_tk == NULLTASK) && (*secs_p >= LOGOPENTIME))
  664. +         *secs_p = LOGOPENTIME;    /* Wake to close log! */
  665. +     }
  666. + #endif
  667.   
  668.       return(ret_tk);
  669.   }
  670. *** /tmp/RCSAa23069    Thu Nov 21 09:16:46 1991
  671. - --- dsap/common/entry.c    Thu Nov 21 09:15:01 1991
  672. ***************
  673. *** 36,41 ****
  674. - --- 36,46 ----
  675.   AttributeType at_alias;
  676.   AttributeType at_objectclass;
  677.   
  678. + extern int local_master_size;
  679. + extern int local_slave_size;
  680. + extern int local_cache_size;
  681.   directory_free (directory)
  682.   Entry directory;
  683.   {
  684. ***************
  685. *** 47,52 ****
  686. - --- 52,67 ----
  687.   
  688.           if (directory->e_children != NULLAVL)
  689.               (void) avl_free(directory->e_children, directory_free);
  690. +         switch (directory->e_data) {
  691. +         case E_TYPE_SLAVE:
  692. +             local_slave_size--; break;
  693. +         case E_DATA_MASTER:
  694. +             local_master_size--; break;
  695. +         case E_TYPE_CACHE_FROM_MASTER:
  696. +             local_cache_size--; break;
  697. +         }
  698.           entry_free(directory);
  699.       }
  700.   }
  701. *** /tmp/RCSAa28299    Thu Nov 21 15:45:25 1991
  702. - --- quipu/dsa_chain.c    Thu Nov 21 15:43:54 1991
  703. ***************
  704. *** 995,1002 ****
  705.       */
  706.       sort_dsa_list (&di);
  707.   
  708. !     if (tk == NULLTASK)
  709. !     return;        /* already done it ! */
  710.   
  711.       if(di2cref(di, &(tk->tk_resp.di_error.de_err), tk->tk_conn->cn_ctx) != OK)
  712.       {
  713. - --- 995,1006 ----
  714.       */
  715.       sort_dsa_list (&di);
  716.   
  717. !     if (tk == NULLTASK) {
  718. !     if (di->di_oper == NULLOPER)
  719. !         return FALSE;
  720. !     else
  721. !         return TRUE;
  722. !     }
  723.   
  724.       if(di2cref(di, &(tk->tk_resp.di_error.de_err), tk->tk_conn->cn_ctx) != OK)
  725.       {
  726. ***************
  727. *** 1010,1023 ****
  728.           task_conn_extract(tk);
  729.           task_error(tk);
  730.           task_extract(tk);
  731. !         return;
  732.       }
  733. !     return;
  734.       }
  735.   
  736.       task_conn_extract(tk);
  737.       task_error(tk);
  738.       task_extract(tk);
  739.   }
  740.   
  741.   static struct access_point * di2ap (di)
  742. - --- 1014,1029 ----
  743.           task_conn_extract(tk);
  744.           task_error(tk);
  745.           task_extract(tk);
  746. !         return TRUE;
  747.       }
  748. !     return TRUE;
  749.       }
  750.   
  751.       task_conn_extract(tk);
  752.       task_error(tk);
  753.       task_extract(tk);
  754. +     return TRUE;
  755.   }
  756.   
  757.   static struct access_point * di2ap (di)
  758. *** /tmp/RCSAa01769    Fri Nov 22 09:37:56 1991
  759. - --- others/quipu/uips/dish/Makefile    Fri Nov 22 09:35:04 1991
  760. ***************
  761. *** 154,162 ****
  762.           -@ls -gls $@
  763.           -@echo ""
  764.   
  765.   xquipurc:    quipurc.o $(LIBES)
  766.           $(LDCC) $(LDFLAGS) -o $@ quipurc.o \
  767. !             $(LIBDSAP) $(LIBISODE) $(LSOCKET) $(LIBGDBM)
  768.   
  769.   l-quipurc:;    $(LINT) $(LFLAGS) quipurc.c $(LLIBS) \
  770.               | grep -v "warning: possible pointer alignment problem"
  771. - --- 154,165 ----
  772.           -@ls -gls $@
  773.           -@echo ""
  774.   
  775. + # Don't use shared libs for xquipurc.
  776.   xquipurc:    quipurc.o $(LIBES)
  777.           $(LDCC) $(LDFLAGS) -o $@ quipurc.o \
  778. !             $(TOPDIR)libdsap.a $(TOPDIR)libisode.a \
  779. !             $(LSOCKET) $(LIBGDBM)
  780.   
  781.   l-quipurc:;    $(LINT) $(LFLAGS) quipurc.c $(LLIBS) \
  782.               | grep -v "warning: possible pointer alignment problem"
  783. *** /tmp/RCSAa23166    Thu Nov 21 09:36:21 1991
  784. - --- dsap/oidtable.oc    Fri Aug 23 08:40:19 1991
  785. ***************
  786. *** 156,164 ****
  787.   
  788.   pilotDSA:     pilotObjectClass.21 : dsa : dSAQuality : 
  789.   
  790. ! qualityLabelledData:     pilotObjectClass.22 : top : dSAQuality : \
  791.       subtreeMinimumQuality, subtreeMaximumQuality
  792.   
  793.   # QUIPU defined object classes
  794.   
  795.   quipuDSA:        quipuObjectClass.1 : dSA : \
  796. - --- 162,174 ----
  797.   
  798.   pilotDSA:     pilotObjectClass.21 : dsa : dSAQuality : 
  799.   
  800. ! # Retired - wrong mandatory attribute
  801. ! oldQualityLabelledData:     pilotObjectClass.22 : top : dSAQuality : \
  802.       subtreeMinimumQuality, subtreeMaximumQuality
  803.   
  804. + qualityLabelledData:     pilotObjectClass.23 : top : singleLevelQuality : \
  805. +     subtreeMinimumQuality, subtreeMaximumQuality
  806.   # QUIPU defined object classes
  807.   
  808.   quipuDSA:        quipuObjectClass.1 : dSA : \
  809. *** /tmp/patchlevel    Thu Nov 21 15:56:54 1991
  810. - --- quipu/patchlevel    Thu Nov 21 15:56:12 1991
  811. ***************
  812. *** 0 ****
  813. - --- 1,1 ----
  814. + 1:Thu Nov 21 15:56:12 GMT 1991
  815.  
  816. - ------------------------------ End of body part 1
  817.  
  818. ------------------------------ End of forwarded message 1
  819.  
  820.